---
title: IOC发展简介
---
依赖注入和依赖查找的来源并不是同一个。依赖注入来源于依赖查找，依赖查找是最原始的依赖查找，依赖注入是依赖查找的一种衍生，是一种更加高级的依赖查找。
## Spring IoC 依赖查找
IoC 的实现大致上可以分为两种主要实现，一个是依赖查找，一个是依赖注入。

依赖查找可以通过名称或者id查找，名称和id在Spring 里面都是认为叫做鉴定的一个方式，名称和id在一个上下文里面必须是唯一的。（Spring 应用里面可以有多个上下文），通过名称查找可以分为两种方式：
* 实时查找
* 延迟查找

也可以根据 Bean 类型查找，分为两种方式：
* 单个 Bean 对象查找
* 集合 Bean 对象查找

也可以根据 Bean 名称+ 类型查找。

也可以根据 Java 注解查找。
* 单个Bean对象
* 集合Bean对象

## Spring 依赖注入
### Spring IoC 依赖来源
* 自定义 Bean
* 容器内建 Bean 对象
* 容器内建依赖

依赖的来源并不仅是我们自定义的 Bean，还有容器内建的 Bean 对象，以及容器内建的依赖，比如 BeanFactory，ApplicationContext 等等。
## 配置元信息
注入和配置到底是什么关系？注入是一种配置，配置是一种注入，注入和配置是一种相对的关系，注入是相对于配置来说的，配置是相对于注入来说的。

注入和配置到底是从哪里来的？可以通过配置的方式去影响容器的行为？这就是配置元信息的概念。

### Bean 定义配置
* 基于 XML 文件
* 基于 Properties 文件
* 基于 Java 注解
* 基于 Java API
### IOC 容器配置元信息
* 基于 XML 文件
* 基于 Java 注解
* 基于 Java API
### 外部化配置
* 基于 Java 注解：比如 @Value
## BeanFactory和ApplicationContext谁才是Spring IoC容器
